package top.sigetech.boot02.controller;

import com.baomidou.kaptcha.Kaptcha;
import com.baomidou.kaptcha.exception.KaptchaIncorrectException;
import com.baomidou.kaptcha.exception.KaptchaNotFoundException;
import com.baomidou.kaptcha.exception.KaptchaTimeoutException;
import com.google.code.kaptcha.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.sigetech.boot02.vo.BaseVo;

import javax.servlet.http.HttpSession;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {


    @Autowired
    private Kaptcha kaptcha;

    /**
     * 登录方法1.0 -> 使用session获取
     * @param username
     * @param password
     * @param captcha
     * @param session
     * @return
     */
    @RequestMapping("/login")
    public BaseVo login(String username, String password, String captcha, HttpSession session){
        log.debug("入参为验证码：{}",captcha);
        String kaptcha = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
        if (kaptcha==null) {
            return BaseVo.error("非法访问");
        }
        log.debug("session内验证码={}",kaptcha);
        if (kaptcha.equals(captcha)){
            return BaseVo.Ok();
        }
        return BaseVo.error();
    }

    @RequestMapping("/login_v2")
    public BaseVo login2(String username, String password, String captcha){
        try{
            kaptcha.validate(captcha,900);

            return BaseVo.Ok();

        }catch (Exception kaptchaException){
            if (kaptchaException instanceof KaptchaIncorrectException) {
                return BaseVo.error("验证码不正确");
            } else if (kaptchaException instanceof KaptchaNotFoundException) {
                return BaseVo.error("验证码未找到");
            } else if (kaptchaException instanceof KaptchaTimeoutException) {
                return BaseVo.error("验证码过期");
            } else {
                return BaseVo.error("验证码渲染失败");
            }
        }



    }

}
